﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Configuration;
using DAL.Entity;
using DAL.Persistencia;

namespace NewTierra.Pages
{
    public partial class WebForm1 : System.Web.UI.Page
    {
     
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Session["Sid"] = "60299";
                CarregarListFotos(sender, e);
                CarregarGridCategoria(sender, e);
                CarregaCategoriaPorSupplier();
            }
            lblSupplierNomeEnviarVerFotos.Text = Convert.ToString(Session["Snome"]);
            lblSupplierNomeCategoriaVerFotos.Text = Convert.ToString(Session["Snome"]);
        }

        #region Popula Fotos
        
        //Método para carregar o GridView com a listagem de fotos do banco
        protected void CarregarListFotos(object sender, EventArgs e)
        {
            CarregarFotos(sender, e);
        }

        protected void CarregarFotos(object sender, EventArgs e)
        {
            try
            {
                FotoDAL f = new FotoDAL();

                DataListFotos.DataSource = f.ListarTodos(Convert.ToInt32(Session["Sid"]));
                DataListFotos.DataBind(); //Desenhar
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ("Erro: " + ex.Message);
            }
        }

        #endregion

        #region Trata Fotos
        
        protected void UploadFotoSupplier(object sender, EventArgs e)
        {
            try
            {
                // Get the HttpFileCollection
                HttpFileCollection hfc = Request.Files;
                bool validarfotos = false;
                
                //Verifica se alguma foto foi adicionada para upload
                if (hfc.Count == 0)
                {   //caso não dispara exceção
                    throw new Exception("Favor selecionar uma foto primeiro.");
                }
                else
                {   //varre todas as foto adicionadas para fazer a regra, caso alguma esteja fora da mesma não
                    //envia foto nenhuma e exibe a exceção
                    for (int j = 0; j < hfc.Count; j++)
                    {
                        if (ValidarFoto(hfc[j]))
                        { validarfotos = true; }
                        else
                        { validarfotos = false; 
                            break; 
                        }
                    }
                }//Se todas as fotos estiverem dentro da regra começa a rotina para cadastro e upload
                if (validarfotos)
                {   //varre todas as fotos para upload e salvar uma à uma
                    for (int i = 0; i < hfc.Count; i++)
                    {
                        HttpPostedFile hpf = hfc[i];
                        if (hpf.ContentLength > 0)
                        {
                            //Monta o nome da foto único
                            string foto = Convert.ToString(Guid.NewGuid().ToString("n") + ".jpg");
                            //Cria a pasta do supplier para galeria de fotos do msmo
                            CriarPastaSupplier();
                            //salva a foto na pasta
                            hpf.SaveAs(Server.MapPath("~/Galeria/") + Session["Sid"] + "/" + foto);
                            //salva a foto na tabela S_Image
                            SalvarFoto(foto);
                        }
                    }
                    lblMsgEnviarFotos.Text = "Fotos enviadas com sucesso!";
                    CarregarListFotos(sender, e);
                    //setar a primeira foto como principal
                    FotoDAL f = new FotoDAL();
                    f.ImagemPrincipal(Convert.ToInt32(Session["Sid"]));
                }
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ("Erro: " + ex.Message);
                return;
            }
        }

        private bool ValidarFoto(HttpPostedFile foto)
        {
            try
            {
                //Verificar se o Usuario preencheu o campo uplFoto
                //if (foto.ContentLength > 0) //HasFile -> Contem um Arquivo?
                //{
                    //Verificar se o arquivo possui extensão .jpg
                    if (foto.FileName.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase))
                    {
                        //Verificar o tamanho do Arquivo

                        if (ConfigurationManager.AppSettings["FotoEnviadas"].Equals("5"))
                        {
                            if (FileUpload1.PostedFile.ContentLength <= (5242880))
                            {
                                return true;
                            }
                            else
                            {
                                throw new Exception("Erro. Selecione apenas imagens de até 5MB");
                            }
                        }
                        else
                        {
                            if (FileUpload1.PostedFile.ContentLength <= (1024 * 1024))
                            {
                                return true;
                            }
                            else
                            {
                                throw new Exception("Erro. Selecione apenas imagens de até 1MB");
                            }
                        }
                    }
                    else
                    {
                        throw new Exception("Erro. Selecione apenas imagens jpg.");
                    }
                //}
                //else
                //{
                //    throw new Exception("Erro. Informe um arquivo para Upload.");
                //}
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = (ex.Message);
                return false;
            }

        }

        public bool SalvarFoto(string ImgNome)
        {
            S_Image s = new S_Image();

            try
            {
                s.Image_capa = "N";
                s.Image_nome = ImgNome;
                s.Image_hupload = Convert.ToString(DateTime.Now);
                s.S_id = Convert.ToInt32(Session["Sid"]);

                FotoDAL f = new FotoDAL();

                f.Salvar(s);
                return true;
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ("Erro: " + ex.Message);
                return false;
            }
        }

        protected void CriarPastaSupplier()
        {
            string path = ("~/Galeria/" + Session["Sid"]);
            try
            {
                if (!Directory.Exists(Server.MapPath(path)))
                { Directory.CreateDirectory(Server.MapPath(path)); }
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
            }
        }

        protected void ExcluirFoto(object sender,CommandEventArgs e)
        {   
            FotoDAL f = new FotoDAL();

            try
            {
                var myId = e.CommandArgument;

                S_Image si = f.ObterPorId(Convert.ToInt32(myId));

                if (!ExcluiFotoPasta(si.Image_nome))
                {
                    throw new Exception("Erro: Não foi possível deletar a foto da pasta galeria");
                }

                f.Excluir(si);
             
                lblMsgEnviarFotos.Text = "Foto excluída com sucesso.";
                CarregarListFotos(sender, e);
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ("Erro: " + ex.Message);
                return;
            }

        }

        public bool ExcluiFotoPasta(string foto)
        {
            try
            {
                string path = "~/Galeria/" + Session["Sid"] + "/" + foto;
                System.IO.File.Delete(Server.MapPath(path));
                return true;
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = "Erro: " + ex.Message;
                return false;
            }
        }

        protected void CapaFoto(object sender, CommandEventArgs e)
        {
            try
            {
                FotoDAL f = new FotoDAL();

                f.AddImagemPrincipal(Convert.ToInt32(Session["Sid"]), Convert.ToInt32(e.CommandArgument));

                lblMsgEnviarFotos.Text = "Foto principal atualizada com sucesso.";
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
            }
        }

        #endregion

        #region Popula Categorias

        public void CarregaCategoriaPorSupplier()
        {
            try
            {
                
                CategoriaDAL c = new CategoriaDAL();
                S_Categoria sc = new S_Categoria();
                               
                sc = c.ListarTodos(Convert.ToInt32(Session["Sid"]));

                if (sc != null)
                {
                    lblClassificacao.Text = sc.Categ_classificacao;
                    ImgCategoria.ImageUrl = "~/ImgCategorias/" + sc.Categ_imgnome;
                }
                else
                {
                    lblClassificacao.Text = "Sem categoria";
                    ImgCategoria.ImageUrl = "~/ImgCategorias/semcategoria.gif";
                }

            }
            catch (Exception ex)
            {

                lblMsgCategorias.Text = ex.Message;
            }


        }

        protected void CarregarGridCategoria(object sender, EventArgs e)
        {
            CarregarCategorias(sender, e);
        }

        protected void CarregarCategorias(object sender, EventArgs e)
        {
            try
            {
                NewTierraEntities Con = new NewTierraEntities();

                GridCategorias.DataSource = Con.S_Categoria.ToList();
                GridCategorias.DataBind(); //Desenhar
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ("Erro: " + ex.Message);
            }
        }

        protected void PaginarDadosCategoria(object sender, GridViewPageEventArgs e)
        {
            //Realiza a paginação

            GridCategorias.PageIndex = e.NewPageIndex;
            CarregarGridCategoria(sender,e); //Atualizar os dados do GridView
        }

        #endregion

        protected void GridCategorias_SelectedIndexChanged(object sender, EventArgs e)
        {     
            SupplierDAL sd = new SupplierDAL();
            try
            {
                sd.Atualizar(Convert.ToInt32(Session["Sid"]), Convert.ToInt32(GridCategorias.SelectedRow.Cells[0].Text));
                CarregaCategoriaPorSupplier();
                lblMsgCategorias.Text = "Categoria atualizada com sucesso.";
            }
            catch (Exception ex)
            {
                lblMsgCategorias.Text = "Erro: " + ex.Message;
            }
        }

        #region Trata Categorias

        protected void btnInserirCategoria_Click(object sender, EventArgs e)
        {
            lblClassificacao.Visible = false;
            ImgCategoria.Visible = false;
            txtClassificacao.Visible = true;
            FileUploadCategoria.Visible = true;
            btnCancelarCategoria.Visible = true;
            btnSalvarCategoria.Visible = true;
            lblMsgCategorias.Text = "";
            btnInserirCategoria.Visible = false;
        }

        protected void SalvaCategoria(object sender, EventArgs e)
        {
            UploadFotoCategoria(sender, e);
        }

        protected void UploadFotoCategoria(object sender, EventArgs e)
        {
            try
            {
                if (ValidarFotoCategoria())
                {
                    string foto = Convert.ToString(Guid.NewGuid().ToString("n") + ".jpg");
                    if (SalvarCategoria(foto))
                    {
                        FileUploadCategoria.PostedFile.SaveAs(HttpContext.Current.Server.MapPath("~/ImgCategorias/") + foto);
                        lblMsgCategorias.Text = "Categoria incluída com sucesso.";
                    }
                    //SalvarCategoria(foto);
                    //hpf.SaveAs(Server.MapPath("~/ImgCategorias") + "\\" + foto);
                }
                CarregarGridCategoria(sender, e);
            }
            catch (Exception ex)
            {
                lblMsgCategorias.Text = ("Erro: " + ex.Message);
            }
        }

        protected bool SalvarCategoria(string foto)
        {
            try
            {
                S_Categoria sc = new S_Categoria();

                sc.Categ_classificacao = txtClassificacao.Text;
                sc.Categ_imgnome = foto;

                CategoriaDAL s = new CategoriaDAL();

                s.Salvar(sc);

                return true;
            }
            catch (Exception ex)
            {
                lblMsgCategorias.Text = "Erro: " + ex.Message;
                return false;
            }
        }

        protected void btnCancelarCategoria_Click(object sender, EventArgs e)
        {
            lblClassificacao.Visible = true;
            ImgCategoria.Visible = true;
            txtClassificacao.Visible = false;
            FileUploadCategoria.Visible = false;
            btnCancelarCategoria.Visible = false;
            btnSalvarCategoria.Visible = false;
            lblMsgCategorias.Text = "Clique em editar para atualizar a classificação.";
            btnInserirCategoria.Visible = true;
        }

        public bool ValidarFotoCategoria()
        {
            try
            {
                //Verificar se o Usuario preencheu o campo uplFoto
                if (FileUploadCategoria.HasFile) //HasFile -> Contem um Arquivo?
                {
                    //Verificar se o arquivo possui extensão .jpg
                    if (FileUploadCategoria.PostedFile.FileName.EndsWith(".jpg"))
                    {
                        //Verificar o tamanho do Arquivo (Até 1MB)
                        if (FileUploadCategoria.PostedFile.ContentLength <= (1024 * 1024))
                        {
                            return true;
                        }
                        else
                        {
                            throw new Exception("Erro. Selecione apenas imagens de até 1MB");
                        }
                    }
                    else
                    {
                        throw new Exception("Erro. Selecione apenas imagens jpg.");
                    }
                }
                else
                {
                    throw new Exception("Erro. Informe um arquivo para Upload.");
                }
            }
            catch (Exception ex)
            {
                lblMsgCategorias.Text = ("Erro: " + ex.Message);
                return false;
            }
        }

        #endregion

        protected void imgAddNomeFoto_Command(object sender, CommandEventArgs e)
        {
            try
            {

                foreach (DataListItem item in DataListFotos.Items)
                {

                    TextBox txtMemoFoto = (TextBox)item.FindControl("txtMemoFoto");
                    Label lblIdImage = (Label)item.FindControl("lblIdImage");                    

                    if (Convert.ToInt32(lblIdImage.Text) == Convert.ToInt32(e.CommandArgument))
                    {
                        if (txtMemoFoto.Visible == false)
                        {
                            txtMemoFoto.Visible = true;
                            ViewState["IdNomeFoto"] = lblIdImage.Text;
                        }
                        else
                        {
                            txtMemoFoto.Visible = false;
                        }
                    }

                }

            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
            }
        }

        protected void txtMemoFoto_TextChanged(object sender, EventArgs e)
        {
            try
            {
                FotoDAL fd = new FotoDAL();

                TextBox textBox = sender as TextBox;

                if (textBox != null)
                {
                    S_Image si = new S_Image();

                    si.Image_memo = textBox.Text;
                    si.Image_id = Convert.ToInt32(ViewState["IdNomeFoto"]);

                    fd.AtualizarMemo(si);

                    //string theText = textBox.Text;

                    foreach (DataListItem item in DataListFotos.Items)
                    {

                        TextBox txtMemoFoto = (TextBox)item.FindControl("txtMemoFoto");
                        Label lblIdImage = (Label)item.FindControl("lblIdImage");

                        if (Convert.ToInt32(lblIdImage.Text) == Convert.ToInt32(ViewState["IdNomeFoto"]))
                        {
                            if (txtMemoFoto.Visible == false)
                            {
                                txtMemoFoto.Visible = true;
                                ViewState["IdNomeFoto"] = "";
                            }
                            else
                            {
                                txtMemoFoto.Visible = false;
                            }
                        }

                    }
                }
                else
                {
                    lblMsgEnviarFotos.Text = "Nenhum nome foi digitado para foto.";
                }

                CarregarFotos(sender, e);

            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
            }
        }

    }
}
